#ifndef _NODOFISICO_H

#define _NODOFISICO_H

#include "Elemento_Fisico.h"
#include "Vertice.h"
#include "Vector.h"
#include <vector>
#include "Enumeraciones.h"

using namespace::std;

class NodoFisico : public Elemento_Fisico
{
public:
	//Constructor
	NodoFisico();

	void setVertice(Vertice *V){objVertice = V;}
	Vertice* getVertice(){return objVertice;}

	void setMasa(const double &m){dblMasa = m;}
	double getMasa(){return dblMasa;}

	void setOneConNodo(const int &valor){vecConexionesNodos.push_back(valor);}
	int getOneConNodo(const unsigned int &i){return vecConexionesNodos[i];}

	void setOneConSpring(const int &valor){vecConexionesSpring.push_back(valor);}
	int getOneConSpring(const unsigned int &i){return vecConexionesSpring[i];}

	void setConexsNodo(const vector<int> &ConNodo){vecConexionesNodos = ConNodo;}
	vector<int> getConexsNodo(){return vecConexionesNodos;}

	void setConexsSpring(const vector<int> &ConSpring){vecConexionesSpring = ConSpring;}
	vector<int> getConexSpring(){return vecConexionesSpring;}

	void setNroConexionesNodo(const unsigned int &nro){intNroConexionesNodo = nro;}
	int getNroConexionesNodo(){return intNroConexionesNodo;}

	void setNroConexionesSpring(const unsigned int &nro){intNroConexionesSpring = nro;}
	int getNroConexionesSpring(){return intNroConexionesSpring;}

	void setFuerzaInterna(const Vector &vF){vFuerzaInterna = vF;}
	Vector getFuerzaInterna(){return vFuerzaInterna;}

	Vertice getVerticeAnterior(){return objVerticeAnterior;}

	void setEstadoNodo(const EstadoNodo &estado){enmEstadoNodo = estado;}
	EstadoNodo getEstadoNodo(){return enmEstadoNodo;}

	//Metodos
	bool GuardarVertice();


private:
	Vertice *objVertice;
	Vertice objVerticeAnterior;
	vector<int> vecConexionesNodos;
	vector<int> vecConexionesSpring;
	double dblMasa;
	Vector vFuerzaInterna;
	unsigned int intNroConexionesNodo;
	unsigned int intNroConexionesSpring;

	EstadoNodo enmEstadoNodo;
};

#endif
